热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

识别码|英豪_PythonSelenium.WebDriver对Cookies的处理及应用『模拟登录』

篇首语:本文由编程笔记#小编为大家整理,主要介绍了PythonSelenium.WebDriver对Cookies的处理及应用『模拟登录』相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python Selenium.WebDriver 对COOKIEs的处理及应用『模拟登录』相关的知识,希望对你有一定的参考价值。



Python Selenium.WebDriver 对COOKIEs的处理及用途『模拟登录』

文章目录


  • Python Selenium.WebDriver 对COOKIEs的处理及用途『模拟登录』
    • 一、COOKIE的介绍🍉
    • 二、COOKIE在浏览器中的形式结构
    • 三、Selenium对COOKIE的操作🥗
    • 四、利用Selenium进行模拟登录并使用COOKIEs
    • 五、获取的COOKIEs配合requests使用
    • 六、获取的COOKIEs配合爬虫框架Scrapy使用💦「难点」
    • 七、补充🍹
    • 参考资料💟
    • 相关博客😏





一、COOKIE的介绍🍉

COOKIE(复数形态:COOKIEs),又称“小甜饼”,为小型文本文件。某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密),COOKIE保存在客户端中,按在客户端中的存储位置,可分为 内存COOKIE和硬盘COOKIE
内存 COOKIE 由浏览器维护,浏览器关闭即消失,存在时间短暂。硬盘COOKIE保存在硬盘里,除非用户手动清理或到了过期时间,硬盘COOKIE不会清除,存在时间较长。所以,按存在时间,可分为非持久COOKIE和持久COOKIE

COOKIE的典型应用场景


  • 网上购物: 当用户选购第一项商品,网站在向用户发送网页的时候,还发送了一段COOKIE会记录着那项商品的信息,当用户访问另一个网页时,浏览器会把COOKIE发送给服务器,这样服务器就能知道用户之前选购了什么,用户继续选购商品,服务器就会在原来那段COOKIE里追加新的商品信息。结账的时候,服务器读取发送来的COOKIE即可。
  • 网站账户登陆: 网页登陆是大部分人都遇到过的,网站往往会请求用户输入账户和密码以登陆网页,在登陆之后下次再去浏览网页时,网站会自动记住我们的密码,不需要再去进行重复性的账号密码输入即可保持登陆状态,或则用户可以勾选 「下次自动登陆」。
    这是在第一次登陆时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的COOKIE到用户的硬盘上进行保存,之后再登录时,如果该COOKIE尚未到期,浏览器会发送该COOKIE,服务器验证凭据,验证通过即可免去再登陆就可保持登陆状态



二、COOKIE在浏览器中的形式结构

COOKIE对于爬虫来说是比较常用到的,一般随着爬虫请求发送,是实现反反爬的参数之一

我使用的是 Edge 浏览器,但 Chrome 浏览器其实也差不多一样。以百度首页为例,打开调试工具(F12),点击Application(应用程序),选择 Storage 下的 COOKIEs 选项,找到当前网页即可看到所有的 COOKIE
可以发现的是,COOKIE在浏览器中是一条一条存在的,每条COOKIE都是一个键值对的结构




三、Selenium对COOKIE的操作🥗

Selenium 能够实现操作浏览器的COOKIE,因为本身就是其调用浏览器运行,能操作的内容有对COOKIE的读取、新增和删除

1)、读取COOKIE

读取COOKIE有两种方法,分别是 driver.get_COOKIEs()driver.get_COOKIE(name)
从方法名上来看一个带s一个不带s,功能上看带s的是获取所有的COOKIE对象,不带s的是获取指定的单条COOKIE


  • driver.get_COOKIEs() 能够获取所有的COOKIE,并以 列表 形式返回所有COOKIE

    演示代码:👇

    from selenium import webdriver
    browser = webdriver.Edge(executable_path=r"msedgedriver.exe")
    browser.get("https://www.baidu.com/")
    print(browser.get_COOKIEs())

    ['domain': '.baidu.com', 'expiry': 1629821019, 'httpOnly': False, 'name': 'BA_HECTOR', 'path': '/', 'secure': False, 'value': '8s818la521202160bp1gia2ic0r', 'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '34437_34441_31254_33848_34072_34092_34106_26350_34416_34390', 'domain': '.baidu.com', 'expiry': 1661353419, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': 'EDB65890D2F1E97267AD56A70D8F24E8:FG=1', 'domain': '.baidu.com', 'expiry': 3777301066, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': 'EDB65890D2F1E972DC3D6A6A8114E431', 'domain': '.baidu.com', 'expiry': 3777301066, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1629817419', 'domain': 'www.baidu.com', 'expiry': 1630681419, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753', 'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1']

  • driver.get_COOKIE(name) 根据名称获取单个COOKIE

    源码:
    对于.get_COOKIE(name)方法,咱们可以先去扩展一下去看源码,无非就是先用.get_COOKIEs()方法获取所有的COOKIE,再通过循环判断提取目标COOKIE

    def get_COOKIE(self, name):
    """
    Get a single COOKIE by name. Returns the COOKIE if found, None if not.
    :Usage:
    driver.get_COOKIE('my_COOKIE')
    """

    if self.w3c:
    try:
    return self.execute(Command.GET_COOKIE, 'name': name)['value']
    except NoSuchCOOKIEException:
    return None
    else:
    COOKIEs = self.get_COOKIEs()
    for COOKIE in COOKIEs:
    if COOKIE['name'] == name:
    return COOKIE
    return None

    演示代码:👇

    获取百度首页名为BD_HOME的COOKIE内容,并将其输出

    from selenium import webdriver
    browser = webdriver.Edge(executable_path=r"msedgedriver.exe")
    browser.get("https://www.baidu.com/")
    print(browser.get_COOKIE("BD_HOME"))

    'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'

2)、新增COOKIE

新增COOKIE只有一个方法,那就是driver.add_COOKIE(COOKIE_dict),根据 二、COOKIE在浏览器中的形式结构 可以得知COOKIE是一个键值对数据,传入的COOKIE对象中必须包含namevalue两个属性,缺少其中任何一个都会添加失败。除此之外还有四个可选属性,分别为path,domain,secure,expiry

源码:
让咱们先来看看源码,源码中就有对 属性值的描述注释,还是值得去看的

def add_COOKIE(self, COOKIE_dict):
"""
Adds a COOKIE to your current session.
:Args:
- COOKIE_dict: A dictionary object, with required keys - "name" and "value";
optional keys - "path", "domain", "secure", "expiry"
Usage:
driver.add_COOKIE('name' : 'foo', 'value' : 'bar')
driver.add_COOKIE('name' : 'foo', 'value' : 'bar', 'path' : '/')
driver.add_COOKIE('name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True)
"""

self.execute(Command.ADD_COOKIE, 'COOKIE': COOKIE_dict)

演示代码:👇

向其百度首页添加一个名为 MyCOOKIE 的COOKIE,其值为 this is my COOKIE!

from selenium import webdriver
browser = webdriver.Edge(executable_path=r"msedgedriver.exe")
browser.get("https://www.baidu.com/")
browser.add_COOKIE("name": "MyCOOKIE", "value": "this is my COOKIE!")

在打开的浏览器窗口,打开调试工具就能看到添加的COOKIE

3)、删除COOKIE

删除COOKIE与读取COOKIE类似,也有两个方法,分别是driver.delete_all_COOKIEs()driver.delete_COOKIE(name),一个是全部删除,一个是删除其中一个,用法也于读取COOKIE一样


  • driver.delete_all_COOKIEs() 删除全部的COOKIE
    演示代码:👇

    from selenium import webdriver
    browser = webdriver.Edge(executable_path=r"msedgedriver.exe")
    browser.get("https://www.baidu.com/")
    browser.delete_all_COOKIEs()

    可以看到的是,百度首页在浏览器中的COOKIE已经全部被清空了

  • driver.delete_COOKIE(name) 删除指定名称的COOKIE
    演示代码:👇

    删除百度首页名为BD_HOME的COOKIE内容

    from selenium import webdriver
    browser = webdriver.Edge(executable_path=r"msedgedriver.exe")
    browser.get("https://www.baidu.com/")
    browser.delete_COOKIE("BD_HOME")

    可以看到名为BD_HOME的COOKIE已经在浏览器中找不到了




四、利用Selenium进行模拟登录并使用COOKIEs

爬虫领域自动化测试中,总有一些网站只有登录后才能访问,或则某些数据只有在登录后才会出现。由于用户登陆后的身份信息通常会存放在COOKIE中,因此可以将登录后的COOKIE保存,再将此COOKIE添加到网页中来模拟已登录状态。能有效避免在登录页面中进行多次操作,即一次登录后即可保留登录状态

实现的步骤很简单,1. 只需要将当前页面中的COOKIE全部清空,2. 然后直接添加 已经在登录状态下拥有身份信息 的COOKIE在网页中,3. 最后别忘记刷新一下网页driver.refresh,就可以实现页面保留登录状态的效果

步骤示例:👇

# 删除所有的COOKIEs
driver.delete_all_COOKIEs()
# 逐个添加COOKIE,可以使用循环
driver.add_COOKIE(COOKIE_dict)
driver.add_COOKIE(COOKIE_dict)
...
driver.refresh()

实际演示:👇🏻

还是以百度首页为例,实现流程:


  • 先使用 Selenium.WebDriverWait 动作行为模拟网站登录
  • 将登录后的COOKIEs获取并保存到本地(以Json格式)
  • 下次打开网页使用COOKIE进行网页登录


需要注意的是,此代码为简单的百度首页登录,并未实现图片验证等自动验证功能,更多为参考意义,具体以实际为主


1)、让咱先来看看对百度首页的模拟登录



这里我使用的是Xpath定位 driver.find_element_by_xpath(xpath),当然也是可以使用其他的定位方式,如ID定位driver.find_element_by_id(id_)


由于存在百度首页登录时会出现验证的情况,代码并未对此进行自动验证处理,这时候就需要手动验证了

def handle_login(username, pwd, isverify=False):
"""
百度首页登录处理方法
:param username: 用户名
:param pwd: 用户密码
:param isverify: 是否存在网页验证
"""

# 点击右上角登录按钮
self.find_by_xpath(r"//a[@id='s-top-loginbtn']").click()
time.sleep(1)
# 点击用户名登录按钮
self.find_by_xpath(r"//p[@id='TANGRAM__PSP_11__footerULoginBtn']").click()
# 向输入框输入账户名
self.find_by_xpath(r"//input[@id='TANGRAM__PSP_11__userName']").send_keys(username)
# 向输入框输入密码
self.find_by_xpath(r"//input[@id='TANGRAM__PSP_11__password']").send_keys(pwd)
# 点击登录按钮
self.find_by_xpath(r"//input[@id='TANGRAM__PSP_11__submit']").click()
# 手动图形验证等待
input("请手动进行图形验证,完毕后输入任意内容继续运行")
if isverify:
# 点击发送验证码按钮
self.find_by_xpath(r"//input[@id='TANGRAM__29__button_send_mobile']").click()
# 等待用户输入手动验证码
vcode = input("请输入六位数验证码:")
self.find_by_xpath(r"//input[@id='TANGRAM__29__input_vcode']").send_keys(vcode)
# 点击确定按钮
self.find_by_xpath(r"//input[@id='TANGRAM__29__button_submit']").click()

2)、COOKIEs处理

需要可持久化存储COOKIE,以及对COOKIE进行读取并判断是否存在
简单写两个函数

def save_COOKIEs(data, encoding="utf-8"):
"""
百度首页COOKIEs保存方法
:param data: 所保存数据
:param encoding: 文件编码,默认utf-8
"""

with open(self.f_path, "w", encoding=encoding) as f_w:
json.dump(data, f_w)
def load_COOKIEs(encoding="utf-8"):
"""
百度首页COOKIEs读取方法
:param encoding: 文件编码,默认utf-8
"""

if os.path.isfile(self.f_path):
with open(self.f_path, "r", encoding=encoding) as f_r:
user_status = json.load(f_r)
return user_status

3)、使用COOKIE进行网页登录

根据刚开始的步骤示例,修改网页中的COOKIEs是很简单的
先将网页中原有的COOKIEs全部删除,然后通过循环一个个将保存的登录COOKIE全部添加进网页

def COOKIEs_login(COOKIEs: list):
"""
百度首页COOKIEs登录方法
:param COOKIEs: 网页所需要添加的COOKIE
"""

self.browser.delete_all_COOKIEs()
for c in COOKIEs:
self.browser.add_COOKIE(c)
self.browser.refresh()

4)、将上述流程总结写成一个对象

import os
import json
import time
from selenium import webdriver
class BaiduLogin:
def __init__(self, url, executable_path, f_path):
"""
对象初始化
:param url: 百度首页地址
:param executable_path: 浏览器驱动路径
:param f_path: COOKIEs文件保存路径
"""

self.url = url
self.browser = self.start_browser(executable_path)
self.f_path = f_path
@staticmethod
def start_browser(executable_path):
return webdriver.Edge(executable_path=executable_path)
def start_url(self):
self.browser.get(self.url)
def find_by_xpath(self, xpath):
return self.browser.find_element_by_xpath(xpath)
def baidu_login(self, *args):
self.start_url()
if COOKIEs := self.load_COOKIEs():
self.__COOKIEs_login(COOKIEs)
else:
self.__handle_login(*args, **kwargs)
def __handle_login(self, username, pwd, isverify=False):
"""
百度首页登录处理方法
:param username: 用户名
:param pwd: 用户密码
:param isverify: 是否存在网页验证
"""

# 点击右上角登录按钮
self.find_by_xpath(r"//a[@id='s-top-loginbtn']").click()
time.sleep(1)
# 点击用户名登录按钮
self.find_by_xpath(r"//p[@id='TANGRAM__PSP_11__footerULoginBtn']").click()
# 向输入框输入账户名
self.find_by_xpath(r"//input[@id='TANGRAM__PSP_11__userName']").send_keys(username)
# 向输入框输入密码
self.find_by_xpath(r"//input[@id='TANGRAM__PSP_11__password']").send_keys(pwd)
# 点击登录按钮
self.find_by_xpath(r"//input[@id='TANGRAM__PSP_11__submit']").click()
# 手动图形验证等待
input("请手动进行图形验证,完毕后输入任意内容继续运行")
if isverify:
time.sleep(1)
# 点击发送验证码按钮
self.find_by_xpath(r"//input[@id='TANGRAM__29__button_send_mobile']").click()
# 等待用户输入手动验证码
vcode = input("请输入六位数验证码:")
self.find_by_xpath(r"//input[@id='TANGRAM__29__input_vcode']").send_keys(vcode)
# 点击确定按钮
self.find_by_xpath(r"//input[@id='TANGRAM__29__button_submit']").click()
self.save_COOKIEs(self.browser.get_COOKIEs())
def __COOKIEs_login(self, COOKIEs: list):
"""
百度首页COOKIEs登录方法
:param COOKIEs: 网页所需要添加的COOKIE
"""

self.browser.delete_all_COOKIEs()
for c in COOKIEs:
self.browser.add_COOKIE(c)
self.browser.refresh()
def save_COOKIEs(self, data, encoding="utf-8"):
"""
百度首页COOKIEs保存方法
:param data: 所保存数据
:param encoding: 文件编码,默认utf-8
"""

with open(self.f_path, "w", encoding=encoding) as f_w:
json.dump(data, f_w)
def load_COOKIEs(self, encoding="utf-8"):
"""
百度首页COOKIEs读取方法
:param encoding: 文件编码,默认utf-8
"""

if os.path.isfile(self.f_path):
with open(self.f_path, "r", encoding=encoding) as f_r:
user_status = json.load(f_r)
return user_status

def quit(self):
# 关闭浏览器
self.browser.quit()

调用:👇

target_driver = "msedgedriver.exe"
url, COOKIE_fname = r"https://www.baidu.com/", "百度登录COOKIEs.json"
login = BaiduLogin(url, target_driver, COOKIE_fname)
login.baidu_login("用户名", "用户密码")



五、获取的COOKIEs配合requests使用

在使用requests请求之前,我们得先知道对于requests来说是怎么使用COOKIE

以百度首页为例,打开调试工具(F12),点击Network(网络\\抓包工具),如果空白的话就按Ctrl + R 快捷键刷新网页读取,找到位于第一个的请求www.baidu.com,选择Headers(标头)后在下方就能看到咱们对于https://www.baidu.com/这个链接的Request Headers(请求头),在里面就能找到COOKIE属性

但信心的朋友会发现在这里的COOKIE格式与我们在Application(应用程序),选择 Storage 下的 COOKIEs 选项看到的完全不一样,但其实都是同一些COOKIEs数据,将两者放在一起进行仔细比较还是能发现共同点的

对于请求头来说,需要的只有namevalue,这也是为什么在 三、Selenium对COOKIE的操作 新增COOKIE中讲到 传入的COOKIE对象中必须包含name和value两个属性,两者以=号拼接,每一个COOKIE以;进行分割



图 5.1



图 5.2







四、利用Selenium进行模拟登录并使用COOKIEs 中,我们使用了 Selenium 将COOKIE 获取并将其了可持久化存储成文件,那么只需要对之前的代码进行一些修改,或则直接拿存储的COOKIE数据来使用就能让获取的COOKIEs配合requests使用

在requests来说,使用COOKIE常用的有两种方式:


  • 通过请求头方式直接将COOKIEs给传入
  • requests.getrequests.post 方法中传入COOKIEs参数


为了便于演示,会将requests返回的页面源码保存到html文件中进行展示


1)、通过请求头方式

在使用请求头方式时,想要事先将COOKIEs处理成与 图 5.1 中那样的格式,通过循环就能搞定,这没什么难度

预处理COOKIEs格式:

def COOKIE_handle(COOKIEs: list):
"""
COOKIEs 标头格式化处理函数
:param COOKIEs: selenium获取的COOKIEs
"""

COOKIEs = [f"i['name']=i['value']" for i in COOKIEs]
return "; ".join(COOKIEs)

使用requests发送请求:

import os
import json
import requests
def COOKIEs_load(path, encoding="utf-8"):
if os.path.isfile(path):
with open(path, "r", encoding=encoding) as f_r:
COOKIEs = json.load(f_r)
return COOKIEs
def COOKIE_handle(COOKIEs: list):
"""
COOKIEs 标头格式化处理函数
:param COOKIEs: selenium获取的COOKIEs
"""

COOKIEs = [f"i['name']=i['value']" for i in COOKIEs]
return "; ".join(COOKIEs)
def get_and_save(url, path, encoding="utf-8", **kwargs):
"""
使用requests对网址发送请求,并将请求结果存储
:param url: 网址
:param path: 存储文件路径
:param encoding: 文件编码,默认utf-8
"""

response = requests.get(url, **kwargs)
if response.ok:
response.encoding = encoding
with open(path, "w", encoding=encoding) as f_w:
f_w.write(response.text)
url = r"https://www.baidu.com/"
headers =
"User-Agent": (r"请使用自己的"
r"UA识别码"),
"COOKIE": COOKIE_handle(COOKIEs_load("百度登录COOKIEs.json"))

get_and_save(url, "baidu.html", headers=headers)

2)、使用COOKIEs参数

值得注意的是,传入的COOKIEs是一个字典,那么就需要对已有的COOKIEs数据进行处理,将其转化成requests能够识别的字典数据类型

预处理COOKIEs格式:

def COOKIE_handle(COOKIEs: list):
"""
COOKIEs 转化为字典函数
:param COOKIEs: selenium获取的COOKIEs
"""

dic =
for i in COOKIEs:
dic[i["name"]] = i["value"]
return dic

使用requests发送请求:

import os
import json
import requests
def COOKIEs_load(path, encoding="utf-8"):
if os.path.isfile(path):
with open(path, "r", encoding=encoding) as f_r:
COOKIEs = json.load(f_r)
return COOKIEs
def COOKIE_handle(COOKIEs: list):
"""
COOKIEs 转化为字典函数
:param COOKIEs: selenium获取的COOKIEs
"""

dic =
for i in COOKIEs:
dic[i["name"]] = i["value"]
return dic
def get_and_save(url, path, encoding="utf-8", **kwargs):
"""
使用requests对网址发送请求,并将请求结果存储
:param url: 网址
:param path: 存储文件路径
:param encoding: 文件编码,默认utf-8
"""

response = requests.get(url, **kwargs)
if response.ok:
response.encoding = encoding
with open(path, "w", encoding=encoding) as f_w:
f_w.write(response.text var cpro_id = "u6885494";

推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
author-avatar
心悦随鑫_196
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有